From: Florian Müllner Date: Wed, 4 Mar 2015 09:29:22 +0000 (+0100) Subject: appDisplay: Disable scrolling during animations X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~1585 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=6bb905895c932db51ff0314fecec765f2f703f31;p=gnome-shell.git appDisplay: Disable scrolling during animations Currently scroll events during the swarm animation will make the grid appear immediately in addition to the animating clones, and there'll be a mismatch with the icon at the target position. This badly breaks the illusion of launchers emerging from the dash and positioning themselves in a grid - as scrolling icons "mid-air" before they form a paginated grid doesn't make much sense anyway, fix this issue by ignoring scroll events for the duration of the animation. https://bugzilla.gnome.org/show_bug.cgi?id=745574 --- diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 1df417f0e..e1ff13a17 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -541,6 +541,12 @@ const AllView = new Lang.Class({ // Overriden from BaseAppView animate: function (animationDirection, onComplete) { + this._scrollView.reactive = false; + let completionFunc = Lang.bind(this, function() { + this._scrollView.reactive = true; + onComplete(); + }); + if (animationDirection == IconGrid.AnimationDirection.OUT && this._displayingPopup && this._currentPopup) { this._currentPopup.popdown(); @@ -551,10 +557,10 @@ const AllView = new Lang.Class({ // signal handler, call again animate which will // call the parent given that popup is already // closed. - this.animate(animationDirection, onComplete); + this.animate(animationDirection, completionFunc); })); } else { - this.parent(animationDirection, onComplete); + this.parent(animationDirection, completionFunc); if (animationDirection == IconGrid.AnimationDirection.OUT) this._pageIndicators.animateIndicators(animationDirection); } @@ -641,7 +647,7 @@ const AllView = new Lang.Class({ }, _onScroll: function(actor, event) { - if (this._displayingPopup) + if (this._displayingPopup || !this._scrollView.reactive) return Clutter.EVENT_STOP; let direction = event.get_scroll_direction();